﻿''' <summary>
''' Class xử lý các thao tác nghiệp vụ
''' </summary>
''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
Public Class clsBLBase

#Region "Property"

    ''' <summary>
    ''' Thuộc tính lưu đối tượng làm việc với cơ sở dữ liệu
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Private m_oDataObject As New DL.clsDLBase("FMSDBConnectionString")
    Private Property DataObject() As DL.clsDLBase
        Get
            Return m_oDataObject
        End Get
        Set(ByVal value As DL.clsDLBase)
            m_oDataObject = value
        End Set
    End Property

    ''' <summary>
    ''' Thuộc tính lưu dataset
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Private m_dsFMS As New FMSDataSet
    Public Property dsFMS() As FMSDataSet
        Get
            Return m_dsFMS
        End Get
        Set(ByVal value As FMSDataSet)
            m_dsFMS = value
        End Set
    End Property

    ''' <summary>
    ''' Thuộc tính lưu tên bảng hiện đang làm việc
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Private m_sTableName As String
    Public Property TableName() As String
        Get
            Return m_sTableName
        End Get
        Set(ByVal value As String)
            m_sTableName = value
        End Set
    End Property

    ''' <summary>
    ''' Thuộc tính lưu bản ghi hiện đang làm việc trong bảng
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Private m_drCurrentRow As DataRow
    Public Property CurrentRow() As DataRow
        Get
            Return m_drCurrentRow
        End Get
        Set(ByVal value As DataRow)
            m_drCurrentRow = value
        End Set
    End Property
#End Region

#Region "Method"

#Region "Constructor"

    ''' <summary>
    ''' Constructor đặt tên cho bảng hiện đang làm việc
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Sub New()
        SetTableName()
    End Sub
#End Region

#Region "Overridable"

    ''' <summary>
    ''' Sub đặt tên cho table hiện đang làm việc
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Protected Overridable Sub SetTableName()

    End Sub

    ''' <summary>
    ''' Sub tạo mới một bản ghi trong bảng
    ''' </summary>
    ''' <returns>Trả lại một bản ghi trống</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Overridable Function InitNewRow() As DataRow
        Return New Object
    End Function
#End Region

    ''' <summary>
    ''' Hàm xác định đối tượng (nói cách khác là chuyển tên bảng thành tiếng Việt)
    ''' </summary>
    ''' <returns>Tên bảng sau khi chuyển thành tiếng việt</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function IdentifyObject() As String
        Dim objectName As String = String.Empty
        If TableName = dsFMS.Category.TableName Then
            objectName = My.Resources.ObjCategory
        ElseIf TableName = dsFMS.Customer.TableName Then
            objectName = My.Resources.ObjCustomer
        ElseIf TableName = dsFMS.Employee.TableName Then
            objectName = My.Resources.ObjEmployee
        ElseIf TableName = dsFMS.Invoice.TableName Then
            objectName = My.Resources.ObjInvoice
        ElseIf TableName = dsFMS.InvoiceDetail.TableName Then
            objectName = My.Resources.ObjInvoiceDetail
        ElseIf TableName = dsFMS.Item.TableName Then
            objectName = My.Resources.ObjItem
        ElseIf TableName = dsFMS.Payment.TableName Then
            objectName = My.Resources.ObjPayment
        ElseIf TableName = dsFMS.Role.TableName Then
            objectName = My.Resources.ObjRole
        ElseIf TableName = dsFMS.Shipment.TableName Then
            objectName = My.Resources.ObjShipment
        ElseIf TableName = dsFMS.ShipmentDetail.TableName Then
            objectName = My.Resources.ObjShimentDetail
        ElseIf TableName = dsFMS.SubCategory.TableName Then
            objectName = My.Resources.ObjSubCategory
        ElseIf TableName = dsFMS.User.TableName Then
            objectName = My.Resources.ObjUser
        End If
        Return objectName
    End Function

    ''' <summary>
    ''' Sub lấy dữ liệu trong bảng đang làm việc hiện thời
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Sub GetData()
        DataObject.GetData(dsFMS, TableName)
    End Sub

    ''' <summary>
    ''' Sub lấy dữ liệu từ database theo khóa ngoại và fill vào dataset
    ''' </summary>
    ''' <param name="tableName">Tên của bảng cần lấy dữ liệu</param>
    ''' <param name="columnName">Tên của cột cần chọn lọc</param>
    ''' <param name="value">Giá trị cần để chọn lọc dữ liệu</param>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Sub GetDataByValue(ByVal tableName As String, ByVal columnName As String, ByVal value As Object)
        DataObject.GetDataByValue(dsFMS, tableName, columnName, value)
    End Sub

    ''' <summary>
    ''' Sub lấy dữ liệu từ một bảng tùy chọn
    ''' </summary>
    ''' <param name="tableName">Tên của bảng muốn lấy dữ liệu</param>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Sub GetDataByTable(ByVal tableName As String)
        DataObject.GetData(dsFMS, tableName)
    End Sub

    ''' <summary>
    ''' Hàm thêm mới một bản ghi từ bảng hiện thời vào database
    ''' </summary>
    ''' <returns>Trả lại đúng nếu thành công và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function AddNew() As Boolean
        Return DataObject.AddNew(CurrentRow)
    End Function

    ''' <summary>
    ''' Hàm thêm mới một bản ghi từ bảng tùy chọn vào database
    ''' </summary>
    ''' <param name="currentRow"></param>
    ''' <returns>Trả lại đúng nếu thành công và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function AddNew(ByVal currentRow As DataRow) As Boolean
        Return DataObject.AddNew(currentRow)
    End Function

    ''' <summary>
    ''' Hàm sửa đổi một bản ghi trong database
    ''' </summary>
    ''' <returns>Trả lại đúng nếu thành công và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function Edit() As Boolean
        Return DataObject.Edit(CurrentRow)
    End Function

    ''' <summary>
    ''' Hàm sửa đổi một bản ghi tùy chọn trong database
    ''' </summary>
    ''' <param name="currentRow">Bản ghi cần sửa đổi</param>
    ''' <returns>Trả lại đúng nếu thành công và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function Edit(ByVal currentRow As DataRow) As Boolean
        Return DataObject.Edit(currentRow)
    End Function

    ''' <summary>
    ''' Hàm xóa một bản ghi trong database theo khóa chính
    ''' </summary>
    ''' <returns>Trả lại đúng nếu thành công và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function DeleteCurrentRow() As Boolean
        Return DataObject.DeleteCurrentRow(CurrentRow)
    End Function

    ''' <summary>
    ''' Hàm xóa một bản ghi trong database theo khóa chính
    ''' </summary>
    ''' <param name="tableName">Tên của bảng muốn xóa dữ liệu</param>
    ''' <param name="columnName">Tên của cột để chọn lọc dữ liệu</param>
    ''' <param name="value">Giá trị cần xóa trong bảng</param>
    ''' <returns>Trả lại đúng nếu thành công và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function DeleteByValue(ByVal tableName As String, ByVal columnName As String, ByVal value As Object) As Boolean
        Return DataObject.DeleteByValue(tableName, columnName, value)
    End Function

    ''' <summary>
    ''' Hàm lưu dữ liệu trong một bảng tùy chọn
    ''' </summary>
    ''' <param name="table">Bảng muốn lưu dữ liệu</param>
    ''' <returns>Trả lại true nếu lưu thành công và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function SaveTable(ByVal table As DataTable) As Boolean
        Return DataObject.SaveTable(table)
    End Function

    ''' <summary>
    ''' Hàm kiểm tra trùng lặp dữ liệu
    ''' </summary>
    ''' <param name="columnName">Tên của trường cần kiểm tra</param>
    ''' <param name="value">Giá trị để kiểm tra</param>
    ''' <returns>Trả lại true nếu dữ liệu lặp và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function CheckDuplicate(ByVal columnName As String, ByVal value As Object) As Boolean
        Return DataObject.CheckDuplicate(columnName, value)
    End Function

    ''' <summary>
    ''' Hàm lưu hóa đơn
    ''' </summary>
    ''' <returns>Trả lại true nếu lưu thành công và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function SaveInvoice() As Boolean
        Return DataObject.SaveInvoice(dsFMS, CurrentRow, dsFMS.InvoiceDetail)
    End Function

    ''' <summary>
    ''' Hàm lấy dữ liệu để hiển thị trên báo cáo
    ''' </summary>
    ''' <param name="tableName">Tên bảng để chứa dữ liệu</param>
    ''' <param name="fillValue1">Giá trị để chọn dữ liệu</param>
    ''' <param name="fillValue2">Giá trị để chọn dữ liệu</param>
    ''' <param name="fillValue3">Giá trị để chọn dữ liệu</param>
    ''' <remarks>Nguyễn Huy Thường added on 13/11/2010</remarks>
    Public Sub FillReport(ByVal tableName As String, ByVal fillValue1 As Object, ByVal fillValue2 As Object, ByVal fillValue3 As Object)
        DataObject.FillReport(dsFMS, tableName, fillValue1, fillValue2, fillValue3)
    End Sub
#End Region
End Class
